#include<stdio.h>
#include<pthread.h>

#define DIST 10
pthread_mutex_t mutex=PTHREAD_MUTEX_INITIALIZER;
int dist []={0,DIST}; //posicion de los corredores
int direccion []={1,-1}; //direccion de movimiento de los corredores

void* corredor(void* num){
	int c=(int)num;
	while(1){
		sleep(rand()%4); //espero
		pthread_mutex_lock(&mutex);
		if(dist[0]<dist[1]){
			dist[c-1]+=direccion[c-1]; //avanzo
			printf("corredor %d avanza a %d\n",c,dist[c-1]);
			pthread_mutex_unlock(&mutex);
		}else{
			pthread_mutex_unlock(&mutex);
			return;
		}
	}
}

int main(){
	pthread_t c1;
	pthread_t c2;
	
	//crear los threads
	pthread_create(&c1, NULL, corredor, (void*)1);
	pthread_create(&c2, NULL, corredor, (void*)2);
	//esperar a que terminen
	pthread_join(c1,NULL);
	pthread_join(c2,NULL);
	printf("Punto de encuentro: %d\nDistancia recorrida por 1: %d\nDistancia recorrida por 2: %d\nGanador: %s\n", dist[0],dist[0],DIST-dist[1],dist[0]>=DIST/2?(dist[0]==DIST/2?"Empate!":"1"):"2");
	return 0;
}
